home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wayzata's Best of Shareware PC/Windows 2
/
Wayzata's Best of Shareware 2.0 (Windows) (Wayzata Technology)(7112)(1994).bin
/
pc
/
dos
/
programg
/
forthcmp
/
queens.4th
< prev
next >
Wrap
Text File
|
1992-03-29
|
2KB
|
65 lines
\ Eight Queens Problem, by Jerry Levan, from Forth Dimensions II/1 page 6
\ NOTE: DEFINE CONSTANT IBM-COMPAT TO BE ZERO IF NOT IBM COMPATIBLE
\ DEFINE THE CONSTANT PRINTIT TO BE ZERO IF NO PRINTING OF RESULTS
\ IS DESIRED (FASTER FOR BENCHMARKING)
\ DEFINE THE CONSTANT VID-DELAY TO BE -1 IF SCREEN IS SNOWY
128 MSDOS
FIND PRINTIT #IF DROP #ELSE -1 CONSTANT PRINTIT #THEN
FIND IBM-COMPAT #IF DROP #ELSE -1 CONSTANT IBM-COMPAT #THEN
IBM-COMPAT #IF INCLUDE DISPLAY1 #THEN
8 ARRAY A
16 ARRAY B
16 ARRAY C
8 ARRAY X
H: FILLARRAY ( address cells -- , fill with 1's )
0 DO -1 OVER ! 2+ LOOP DROP ;
0 A 8 FILLARRAY
0 B 16 FILLARRAY
0 C 16 FILLARRAY
0 X 8 FILLARRAY
2 1 IN/OUT
: SAFE DUP A @ IF SWAP 2DUP - 7 + C @ IF + B @ EXIT THEN THEN
2DROP 0 ;
2 0 IN/OUT
: MARK SWAP 2DUP 2DUP - 7 + C OFF
+ B OFF DROP A OFF ;
2 0 IN/OUT
: UNMARK SWAP 2DUP 2DUP - 7 + C ON
+ B ON DROP A ON ;
VARIABLE TRIES
PRINTIT #IF
0 0 IN/OUT
: PRINTSOL ." found on try " TRIES @ 6 .R ." : "
8 0 DO I X @ 1+ 5 .R LOOP CR ;
#THEN
1 0 IN/OUT
: TRY 8 0 DO 1 TRIES +!
DUP I SAFE IF DUP I MARK I OVER X ! DUP 7 <
IF DUP 1+ TRY ( recurse )
PRINTIT #IF ELSE PRINTSOL #THEN THEN
DUP I UNMARK THEN LOOP DROP ;
: MAIN IBM-COMPAT #IF SETUP-VID #THEN
0 TRIES ! ." Starting..." CR 0 TRY
." Done!" CR
IBM-COMPAT #IF UNSETUP-VID #THEN ;
IBM-COMPAT #IF INCLUDE DISPLAY2 #THEN
INCLUDE FORTHLIB
END